-- *****************************************************************
-- CISCO-5800-HEALTH-MON-MIB.my:  CISCO Health Monitor MIB file
--
-- August 1997 Mark Szczesniak / Ashadevaki Hegde
--
-- Copyright (c) 1997-1998 by cisco Systems, Inc.
-- All rights reserved.
-- 
-- *****************************************************************
-- $Endlog$
--
CISCO-5800-HEALTH-MON-MIB DEFINITIONS ::= BEGIN

IMPORTS
        MODULE-IDENTITY,
        OBJECT-TYPE,
        NOTIFICATION-TYPE,
        Counter32,
        Gauge32,
        Integer32, 
        IpAddress
                FROM SNMPv2-SMI
        DisplayString,
        TruthValue
                FROM SNMPv2-TC
        MODULE-COMPLIANCE,
        OBJECT-GROUP
                FROM SNMPv2-CONF
        ciscoExperiment
                FROM CISCO-SMI;


cisco5800HealthMonMIB MODULE-IDENTITY
        LAST-UPDATED    "9708260000Z"
        ORGANIZATION    "Cisco Systems, Inc."
        CONTACT-INFO
                "       Cisco Systems
                        Customer Service

                Postal: 170 W Tasman Drive
                        San Jose, CA  95134
                        USA

                   Tel: +1 800 553-NETS

                E-mail: cs-snmp@cisco.com"
        DESCRIPTION
                "This MIB provides a means to monitor the status of a
        system's health."

        ::= { ciscoExperiment 28 }


cisco5800HealthMonObjects OBJECT IDENTIFIER ::= { cisco5800HealthMonMIB 1 }

--
-- This mib gives you the status of the health monitoring subsystem
-- running on the system controller. Health monitoring allows the user
-- to configure three types of utilization on the system
-- controller. Namely modem, trunk, and io-mem. When io-mem monitoring
-- type is configured on the system controller, health moniotoring sets
-- up the expressions, RMON alarms, RMON events on the known
-- shelves. RMON alarm is asked to monitor the result from the set
-- expression and if it's value exceeds the configured threshold value
-- an event trap is sent to the system-controller. This trap is converted
-- into the healthmon MIB format and sent to the management
-- station. For the other two monitoring types, health monitor sets up
-- the utilization calculation on the system controller based on the info
-- available on this mib.
--
-- Trunk Utilization = (ciscoHealthMonNumActiveDS0 * 100)/
--                      (ciscoHealthMonNumTotalDS0)
-- Modem Utilization = (ciscoHealthMonNumModemsInUse * 100)/
--                      (ciscoHealthMonNumTotalModems)
--
--
-- 1.  ciscoHealthMonStatusTable - This has the status of the configured
-- monitoring types.
--
-- 2.  ciscoHealthMonCountTable - This table keeps track of following
-- info from each router shelf:
--
-- o # T1/E1 lines up 
-- o # T1/E1 lines with operational status down and admin status up 
-- o # of Active DS0's (cpmActiveDS0 from CISCO-POP-MGMT-MIB.my)
-- o # of Total DS0's  (#of t1 - 1* 24) + 23 + (#of e1 * 30)
-- o # of Installed modems 
--      (cmSystemInstalledModem from CISCO-MODEM-MGMT-MIB.my)
-- o # of Inuse Modems(cmSystemModemsInUse from CISCO-MODEM-MGMT-MIB.my
-- o # of Bad modems (cmSystemModemsUnavailable from CISCO-MODEM-MGMT-MIB.my)
-- o # of IOmem free (IO-mem ciscoMemoryPoolUsed from CISCO-MEMORY-POOL-MIB.my)
-- o # of IOmem used (IO-mem ciscoMemoryPoolFree from CISCO-MEMORY-POOL-MIB.my)
-- o % CPU avgBusy5  (avgBusy5 from cisco-10-mib.my)
-- o % Utilization of ifOutOctets of egress ports
-- A port is considered as an egress port if it's ifSpeed > 1544000
-- % Utilization of ifOutOctets = (diff_total_ifOutoctets*100)/
--                                 (time * total_speed)
-- o % Utilization of ifInOctets of egress ports
--
-- % Utilization of ifInOctets = (diff_total_ifInOctets*100)/
--                                 (time * total_speed)
--
-- The above values are collected from a single shelf. They are added
-- together to get the total number in the nitro complex.
-- Example:
-- #T1 & E1 lines UP = (T1 & E1 Lines up on shelf#1) + 
--                     (T1 & E1 Lines up on shelf#2) + 
--                  :
--                  :
--                  (T1 & E1 Lines up on shelf#n) 
-- 
-- NOTE: 
-- Monitored shelf - A shelf is discovered by the system controller using 
-- the Shelf Discovery Protocol

ciscoHealthMonNumShelves OBJECT-TYPE
        SYNTAX     Integer32 
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The total number of shelves monitored by the health monitor."
        ::= { cisco5800HealthMonObjects 3 }

ciscoHealthMonNumT1E1LinesUp OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "This is the total number of active T1/E1 lines across
        all the monitored shelves."
        ::= { cisco5800HealthMonObjects 4 }

ciscoHealthMonNumT1E1LinesDown OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "This is the total number of inactive T1/E1 lines
        across all the monitored shelves."
        ::= { cisco5800HealthMonObjects 5 }

ciscoHealthMonNumActiveDS0 OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The total number of DS0's in use across all the monitored 
        shelves."
        ::= { cisco5800HealthMonObjects 6 }

ciscoHealthMonNumTotalDS0 OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The total number of DS0's from all the monitored shelves."
        ::= { cisco5800HealthMonObjects 7 }

ciscoHealthMonNumTotalModems OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "This is the total number of ciscoHealthMonTotalModems
        from all the monitored shelves."
        ::= { cisco5800HealthMonObjects 8 }

ciscoHealthMonNumModemsInUse OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "This is the total number of ciscoHealthMonModemsInUse
        from all the monitored shelves ."
        ::= { cisco5800HealthMonObjects 9 }

ciscoHealthMonNumUnavailableModems OBJECT-TYPE
        SYNTAX     Gauge32 
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "This is the total number of ciscoHealthMonUnavailableModems
        from all the monitored shelves."
        ::= { cisco5800HealthMonObjects 10 }

ciscoHealthMonStatusTable OBJECT-TYPE
        SYNTAX     SEQUENCE OF CiscoHealthMonStatusEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "The table of status maintained by the health monitor."
        ::= { cisco5800HealthMonObjects 1 }

ciscoHealthMonStatusEntry OBJECT-TYPE
        SYNTAX     CiscoHealthMonStatusEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "An entry in the status table, containing the
        information about the status of the health monitoring setup
        commands. Depending on the configured monitoring type these commands
        are setup on the shelf or on the system controller. Monitoring iomem
        is done on the shelf where as monitoring modem and trunk is done on
        system controller. ciscoHealthMonShelfId, ciscoHealthMonAddress 
        doesn't exist for the modem and trunk monitoring types since 
        they are done on the system controller. "
        INDEX      { ciscoHealthMonStatusIndex, ciscoHealthMonStatusType }
        ::= { ciscoHealthMonStatusTable 1 }

CiscoHealthMonStatusEntry ::=
        SEQUENCE {
                ciscoHealthMonStatusIndex       Integer32,
                ciscoHealthMonStatusType        Integer32 (1..3),
                ciscoHealthMonShelfId           Integer32,
                ciscoHealthMonAddress           IpAddress,
                ciscoHealthMonDescr             DisplayString,
                ciscoHealthMonValue             Gauge32,
                ciscoHealthMonThreshold         Integer32 (1..100),
                ciscoHealthMonThresholdExceedCount Integer32 
        }


ciscoHealthMonStatusIndex OBJECT-TYPE
        SYNTAX     Integer32(0..2147483647)
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "Unique index for indexing the ciscoHealthMonStatusTable.
        This index is for SNMP purposes only, and has no intrinsic meaning."
        ::= { ciscoHealthMonStatusEntry 1 }

ciscoHealthMonStatusType OBJECT-TYPE
        SYNTAX      Integer32 (1..3)
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
                "Monitoring type
                 modemUtil(1), trunkUtil(2), iomemUtil(3)"
        ::= { ciscoHealthMonStatusEntry 2 }

ciscoHealthMonShelfId OBJECT-TYPE
        SYNTAX      Integer32 
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
                "This is the shelf-id of the monitored shelf."
        ::= { ciscoHealthMonStatusEntry 3 }

ciscoHealthMonAddress OBJECT-TYPE
        SYNTAX      IpAddress
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
                "This is the IP address of the monitored shelf."
        ::= { ciscoHealthMonStatusEntry 4 }

ciscoHealthMonDescr OBJECT-TYPE
        SYNTAX     DisplayString(SIZE (0..32))
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "Textual description of the utilization type being
        monitored on a shelf. This description is a short textual label, 
        suitable as a human-sensible identification for the rest of the 
        information in the entry."
        ::= { ciscoHealthMonStatusEntry 5 }

ciscoHealthMonValue OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The current value for the monitoring type on a
        monitored shelf."
        ::= { ciscoHealthMonStatusEntry 6 }

ciscoHealthMonThreshold OBJECT-TYPE
        SYNTAX     Integer32 (1..100)
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "This is the monitoring threshold value configured
        through the command line. 
        
        If the configured monitoring type is io-mem, rmon alarm on the
        shelf will use this value as the threshold for generating the
        event. Shelf will be asked to send this generated event trap to the
        system controller. Once the system controller receives this trap, 
        trap will converted to the health monitor mib format and sent to the
        management station.

        If the configured monitoring types are trunk and/or modem,
        ciscoHealthMonValue is compared with this value and if
        ciscoHealthMonValue exceeds this value, a notification is sent to the
        configured management station. Also, a notification will be sent to
        the management station if the current monitoring value is less than
        the configured threshold and the previous monitored value is greater
        than the configured threshold value."
        ::= { ciscoHealthMonStatusEntry 7 }

ciscoHealthMonThresholdExceedCount OBJECT-TYPE
        SYNTAX     Integer32 
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "Number of times monitoring value exceeded the
        configured threshold value."
        ::= { ciscoHealthMonStatusEntry 8 }



--
-- HealthMonCount Table
--

ciscoHealthMonCountTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF CiscoHealthMonCountEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "The table of mib entries maintained by the health monitor."
        ::= { cisco5800HealthMonObjects 2 }

ciscoHealthMonCountEntry OBJECT-TYPE
        SYNTAX     CiscoHealthMonCountEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "An entry in the count table represents the polled data
        of ceratin mib variables for a router shelf. System controller will do
        the polling of the mib variables only if system controller can
        talk to that particular router shelf."
        INDEX      { ciscoHealthMonCountIndex }
        ::= { ciscoHealthMonCountTable 1 }

CiscoHealthMonCountEntry ::=
        SEQUENCE {
                ciscoHealthMonCountIndex                Integer32,
                ciscoHealthMonT1E1LinesUp               Gauge32,
                ciscoHealthMonT1E1LinesDown             Gauge32,
                ciscoHealthMonActiveDS0                 Gauge32,
                ciscoHealthMonTotalDS0                  Gauge32,
                ciscoHealthMonTotalModems               Gauge32,
                ciscoHealthMonModemsInUse               Gauge32,
                ciscoHealthMonUnavailableModems         Gauge32,
                ciscoHealthMonIOMemUsed                 Gauge32,
                ciscoHealthMonIOMemFree                 Gauge32,
                ciscoHealthMonCPUavgBusy5               Integer32 (1..100),
                ciscoHealthMonUtilEgressInOctet         Counter32,
                ciscoHealthMonUtilEgressOutOctet        Counter32,
                ciscoHealthMonShelfLastUpdate           DisplayString
        }

ciscoHealthMonCountIndex OBJECT-TYPE
        SYNTAX     Integer32 (0..9999)
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "Unique index for indexing the
        ciscoHealthMonCountTable. This unique index represents the shelf-id of
        the monitored shelf."
        ::= { ciscoHealthMonCountEntry 1 }

ciscoHealthMonT1E1LinesUp OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The number of active T1 and E1 lines on a shelf. A
        line is considered as an active line if it is operationally up."
        ::= { ciscoHealthMonCountEntry 2 }

ciscoHealthMonT1E1LinesDown OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The number of inactive T1 and E1 lines on a
        shelf. This is the special case where a line is counted as down if it
        is operationally down and administratively up."
        ::= { ciscoHealthMonCountEntry 3 }

ciscoHealthMonActiveDS0 OBJECT-TYPE
        SYNTAX     Gauge32 
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The number of DS0's that are currently in use."
        ::= { ciscoHealthMonCountEntry 4 }

ciscoHealthMonTotalDS0 OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The total number of DS0's on a shelf. This is based
        on the number of T1 and E1 lines present on the router shelf.

        Total DS0 = (# of T1 lines - 1 * 24) + 23 + (# of E1 lines*30)."
        ::= { ciscoHealthMonCountEntry 5 }

ciscoHealthMonTotalModems OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The total number of modems installed on a shelf. This
        is the polled value for cmSystemInstalledModem from the router shelf."
        ::= { ciscoHealthMonCountEntry 6 }

ciscoHealthMonModemsInUse OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
                "The number of modems on a shelf that are in the
        following states: connected, offHook, loopback, or
        downloadFirmware. This the polled value for cmSystemModemsInUse from
        the router shelf."
        ::= { ciscoHealthMonCountEntry 7 }

ciscoHealthMonUnavailableModems OBJECT-TYPE
        SYNTAX     Gauge32
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
              "The number of modems on a shelf that cannot accept the
        calls. They are in the following states: unknown, onHook, busiedOut,
        disabled, bad, or downloadFirmwareFailed. This is the polled value for
        cmSystemModemsUnavailable from the router shelf."
        ::= { ciscoHealthMonCountEntry 8 }
ciscoHealthMonIOMemUsed OBJECT-TYPE
        SYNTAX      Gauge32
        UNITS       "bytes"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
                "The number of bytes of IO memory that are currently
        in use by the applications on the shelf. This is the polled value for
        ciscoMemoryPoolUsed of io-mem type on the router shelf."
        ::= { ciscoHealthMonCountEntry 9 }

ciscoHealthMonIOMemFree OBJECT-TYPE
        SYNTAX      Gauge32
        UNITS       "bytes"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
                "The number of bytes of IO memory that are currently
        available to use on the shelf.This is the polled value for
        ciscoMemoryPoolFree of io-mem type on the router shelf."
        ::= { ciscoHealthMonCountEntry 10 }

ciscoHealthMonCPUavgBusy5 OBJECT-TYPE
        SYNTAX      Integer32 (1..100)
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
                "5 minute exponentially-decayed moving average of the
        CPU busy percentage. This is the polled value for avgBusy5 from the
        router shelf."
        ::= { ciscoHealthMonCountEntry 11 }

ciscoHealthMonUtilEgressInOctet OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
                "This is the percentage utilization of total number of
        octets received on all the active egress interface, including framing
        characters.

         A port is considered as an egress port if it's ifSpeed > 1544000
         % Utilization of ifInOctets = (diff_total_ifInoctets*100)/
                                           (time in seconds * total_speed)
        ."
        ::= { ciscoHealthMonCountEntry 12 }

ciscoHealthMonUtilEgressOutOctet OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
                "This is the percentage utilization of the total
        number of octets transmitted out on all the active egress interface,
        including framing characters.

        A port is considered as an egress port if it's ifSpeed > 1544000
        % Utilization of ifOutOctets = (diff_total_ifOutoctets*100)/
                                           (time in seconds * total_speed)
        ."
        ::= { ciscoHealthMonCountEntry 13 }

ciscoHealthMonShelfLastUpdate OBJECT-TYPE
        SYNTAX     DisplayString (SIZE (0..32))
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
              "This is the last time at which the system-controller
        has polled the mib entries from a shelf. However, if system-controller
        can not talk to that shelf, this entry will have the same time as the
        last update and a string Lost Contact. All the mib entries
        corresponding to this shelf will remain as it is until
        system-controller can talk to this shelf again."
        ::= { ciscoHealthMonCountEntry 14 }




ciscoHealthMonMIBNotificationEnables OBJECT IDENTIFIER ::= { cisco5800HealthMonMIB 2 }


ciscoHealthMonEnableNotification OBJECT-TYPE
        SYNTAX      TruthValue
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION
               "This variable indicates whether the system produces
        the ciscoHealthNotification.  A false value will prevent notifications
        from being generated by this system."
        DEFVAL { false }
        ::= { ciscoHealthMonMIBNotificationEnables 1 }

-- the following two OBJECT IDENTIFIERS are used to define SNMPv2 Notifications
-- that are backward compatible with SNMPv1 Traps.
ciscoHealthMonMIBNotificationPrefix OBJECT IDENTIFIER ::= { cisco5800HealthMonMIB 3 }
ciscoHealthMonMIBNotifications OBJECT IDENTIFIER ::= { ciscoHealthMonMIBNotificationPrefix 0 }

ciscoHealthMonNotification NOTIFICATION-TYPE
        OBJECTS {
                ciscoHealthMonStatusType,
                ciscoHealthMonShelfId,
                ciscoHealthMonAddress,
                ciscoHealthMonDescr,
                ciscoHealthMonValue,
                ciscoHealthMonThreshold
                }
        STATUS  current
        DESCRIPTION
                "A ciscoHealthMonNotification is sent if the measured
        utilization has crossed the threshold value. It will be generated
        when the value rises above the threshold. ciscoHealthMonShelfId and
        ciscoHealthMonAddress are optional entries. This entry is valid only
        if the notification generated for the monitoring types set on the
        router shelf. This entry will not have anything if notification is
        generated for the monitoring types set on the system controller."
        ::= { ciscoHealthMonMIBNotifications 1 }

-- conformance information

cisco5800HealthMonMIBConformance OBJECT IDENTIFIER ::= { cisco5800HealthMonMIB 4 }
cisco5800HealthMonMIBCompliances OBJECT IDENTIFIER ::= { cisco5800HealthMonMIBConformance 1 }
cisco5800HealthMonMIBGroups      OBJECT IDENTIFIER ::= { cisco5800HealthMonMIBConformance 2 }


-- compliance statements

cisco5800HealthMonMIBCompliance MODULE-COMPLIANCE
        STATUS  current
        DESCRIPTION
                "The compliance statement for entities which implement
                the Cisco Health Monitor MIB"
        MODULE  -- this module
                MANDATORY-GROUPS { cisco5800HealthMonMIBGroup }
        ::= { cisco5800HealthMonMIBCompliances 1 }

-- units of conformance

cisco5800HealthMonMIBGroup OBJECT-GROUP
        OBJECTS {
                ciscoHealthMonStatusType,
                ciscoHealthMonShelfId,
                ciscoHealthMonAddress,
                ciscoHealthMonDescr,
                ciscoHealthMonValue,
                ciscoHealthMonThreshold,
                ciscoHealthMonThresholdExceedCount,
                ciscoHealthMonT1E1LinesUp,
                ciscoHealthMonT1E1LinesDown,
                ciscoHealthMonActiveDS0,
                ciscoHealthMonTotalDS0,
                ciscoHealthMonTotalModems,
                ciscoHealthMonModemsInUse,
                ciscoHealthMonUnavailableModems,
                ciscoHealthMonIOMemUsed,
                ciscoHealthMonIOMemFree,
                ciscoHealthMonCPUavgBusy5,
                ciscoHealthMonUtilEgressInOctet,
                ciscoHealthMonUtilEgressOutOctet,
                ciscoHealthMonShelfLastUpdate,
                
                ciscoHealthMonNumShelves,       
                ciscoHealthMonNumT1E1LinesUp,   
                ciscoHealthMonNumT1E1LinesDown,
                ciscoHealthMonNumActiveDS0,     
                ciscoHealthMonNumTotalDS0,      
                ciscoHealthMonNumTotalModems,
                ciscoHealthMonNumModemsInUse,
                ciscoHealthMonNumUnavailableModems,
                
                ciscoHealthMonEnableNotification
        }
        STATUS  current
        DESCRIPTION
                "A collection of objects providing health monitoring
                capability to a cisco chassis."
        ::= { cisco5800HealthMonMIBGroups 1 }

END